package com.linux4fun.singleton;

/**
 * 使用静态内部类生成单例
 * 解决了在外部类中初次加载便会生成实例的问题（当实例化非常耗资源时，主动生成单例是不可取的）
 * 静态内部类不会在外部类加载的时候被加载，而是再被调用时才会主动加载
 * https://kylepeng93.github.io
 *
 * @author pengkai
 * @date 2021-03-21 下午9:31
 */
public class StaticInnerClassSingleton {
    private StaticInnerClassSingleton(){}
    static {
        System.out.println("我是包含静态内部类的外部类");
    }

    /**
     * 静态内部类只会加载一次，且不会自动初始化，必须被外部类或者方法所引用
     */
    private static class MyInstanceHelper {
        static {
            System.out.println("我是静态内部类");
        }
        private static final StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();
    }

    public static StaticInnerClassSingleton getInstance() {
        return MyInstanceHelper.INSTANCE;
    }

    public static String sayHello() {
        return "hello， 我的单例类的静态方法";
    }

}
